const fs = require('fs');
const path = require('path');

function File() {
}

/**
 * 路径是否存在，不存在则创建
 * @param {string} dir 路径
 */
File.dirExists = async function (dir) {
    let isExists = await this.getStat(dir)
    // 如果该路径存在且不是文件，返回 true
    if (isExists && isExists.isDirectory()) {
        return true
    } else if (isExists) {  // 这个路径对应一个文件夹，无法再创建文件了
        return false
    }
    // 如果该路径不存在
    let tempDir = path.parse(dir).dir  //拿到上级路径
    // 递归判断，如果上级路径也不存在，则继续循环执行，直到存在
    let status = await this.dirExists(tempDir)
    let mkdirStatus
    if (status) {
        mkdirStatus = await this.mkdir(dir)
    }
    return mkdirStatus
}

/**
 * 读取路径信息
 * @param {string} filePath 路径
 */
File.getStat = function (filePath) {
    return new Promise((resolve, reject) => {
        fs.stat(filePath, (err, stats) => {
            if (err) {
                resolve(false)
            } else {
                resolve(stats);
            }
        })
    })
}

/**
 * 创建路径
 * @param {string} dir 路径
 */
File.mkdir = function (dir) {
    return new Promise(function (resolve, reject) {
        fs.mkdir(dir, {recursive: true}, function (err) {
            if (err) {
                console.log('创建目录失败', err);
                resolve(false);
            } else {
                resolve(true);
            }
        })
    })
}

/**
 * 使用 access 函数判断文件是否存在
 * @param filePath
 * @returns {Promise<unknown>}
 */
File.isFileExisted = function (filePath) {
    return new Promise(function (resolve, reject) {
        fs.access(filePath, (err) => {
            if (err) {
                resolve(false);
            } else {
                resolve(true);
            }
        })
    })
}

/**
 * 删除文件
 * @param filePath
 */
File.deleteFile = function (filePath) {
    fs.unlink(filePath, function (err) {
        if (err) {
            console.log('删除临时文件报错', err);
        }
    })
}

module.exports = File;
